package com.mo.tools.encrypt;

import org.apache.commons.codec.digest.DigestUtils;

/**
 * @name: EncryptUtil
 * @description: 加密工具类
 * @author: Yang Xingfu
 * @date: 2019-12-20 09:13
 **/
public class EncryptUtil {

    /**
     * md5 加密
     * @param plaintText 明文
     * @return  密文
     */
    public static String md5(String plaintText) {
        return DigestUtils.md5Hex(plaintText);
    }

    /**
     * md5加密
     * @param plaintText 明文
     * @param frequency  加密次数
     * @return  密文
     */
    public static String md5(String plaintText, int frequency) {
        String cipherText = DigestUtils.md5Hex(plaintText);
        if(frequency > 1) {
            return md5(cipherText, --frequency);
        }
        return cipherText;
    }

    /**
     * sha1加密
     * @param plaintText  明文
     * @return  密文
     */
    public static String sha1(String plaintText) {
        return DigestUtils.sha1Hex(plaintText);
    }

    /**
     * sha1加密
     * @param plaintText 明文
     * @param frequency  加密次数
     * @return  密文
     */
    public static String sha1(String plaintText, int frequency) {
        String cipherText = DigestUtils.sha1Hex(plaintText);
        if(frequency > 1) {
            return sha1(cipherText, --frequency);
        }
        return cipherText;
    }

    /**
     * sha256加密
     * @param plaintText  明文
     * @return  密文
     */
    public static String sha256(String plaintText) {
        return DigestUtils.sha256Hex(plaintText);
    }

    /**
     * sha256加密
     * @param plaintText 明文
     * @param frequency  加密次数
     * @return  密文
     */
    public static String sha256(String plaintText, int frequency) {
        String cipherText = DigestUtils.sha256Hex(plaintText);
        if(frequency > 1) {
            return sha256(cipherText, --frequency);
        }
        return cipherText;
    }

    /**
     * sha512加密
     * @param plaintText  明文
     * @return  密文
     */
    public static String sha512(String plaintText) {
        return DigestUtils.sha512Hex(plaintText);
    }

    /**
     * sha512加密
     * @param plaintText 明文
     * @param frequency  加密次数
     * @return  密文
     */
    public static String sha512(String plaintText, int frequency) {
        String cipherText = DigestUtils.sha512Hex(plaintText);
        if(frequency > 1) {
            return sha512(cipherText, --frequency);
        }
        return cipherText;
    }

    /**
     * md5混合sha256加密
     * @param plaintText  明文
     * @return  密文
     */
    public static String md5ThenSha256(String plaintText) {
        String cipherText = DigestUtils.md5Hex(plaintText);
        return DigestUtils.sha256Hex(cipherText);

    }

    /**
     * md5混合sha256加密
     * @param plaintText 明文
     * @param frequency  加密次数
     * @return  密文
     */
    public static String md5ThenSha256(String plaintText, int frequency) {
        String cipherText = DigestUtils.md5Hex(plaintText);
        cipherText =  DigestUtils.sha256Hex(cipherText);
        if(frequency > 1) {
            return md5ThenSha256(cipherText, --frequency);
        }
        return cipherText;
    }

    /**
     * md5混合sha512加密
     * @param plaintText  明文
     * @return  密文
     */
    public static String md5ThenSha512(String plaintText) {
        String cipherText = DigestUtils.md5Hex(plaintText);
        return DigestUtils.sha512Hex(cipherText);

    }

    /**
     * md5混合sha512加密
     * @param plaintText 明文
     * @param frequency  加密次数
     * @return  密文
     */
    public static String md5ThenSha512(String plaintText, int frequency) {
        String cipherText = DigestUtils.md5Hex(plaintText);
        cipherText =  DigestUtils.sha512Hex(cipherText);
        if(frequency > 1) {
            return md5ThenSha512(cipherText, --frequency);
        }
        return cipherText;
    }

    /**
     * 默认加密算法
     * @param plaintText 明文
     * @return  密文
     */
    public static String defaultEncryptAlgorithm (String plaintText) {
        return md5(plaintText, 2);
    }
    

}
